home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / tclMotif-1.4 / programs / xtmfm < prev    next >
Text File  |  1995-06-29  |  18KB  |  757 lines

  1. #!/usrs/tm/src/moat -f
  2.  
  3. # An implementation of xmfm using tclMotif
  4.  
  5. set FILES_TOOLBAR_SIZE 6
  6.  
  7.  
  8. #######################################################################
  9. #
  10. # This part creates the geometry of xtmfm, and sets up appropriate
  11. # callbacks to handle behaviour
  12. #
  13. #######################################################################
  14.  
  15. #
  16. # createApplication
  17. #   - toplevel create function for the whole lot
  18. #
  19. proc createApplication {} {
  20.   xmMainWindow .main
  21.  
  22.   xmForm .main.form
  23.  
  24.   xmLabel .main.form.dirLabel
  25.  
  26.   set filesToolbar [createFilesToolbar .main.form]
  27.  
  28.   set dirsToolbar [createDirsToolbar .main.form]
  29.  
  30.   set pane [createPane .main.form]
  31.  
  32.   set menu [createMenu .main]
  33.  
  34.   panelSetFiles $pane
  35.  
  36.   $menu manageChild
  37.   $dirsToolbar manageChild
  38.   $filesToolbar manageChild
  39.   $pane manageChild
  40.   .main.form.dirLabel manageChild
  41.   .main.form manageChild
  42.   .main manageChild
  43.  
  44.   setGeometry .main.form.dirLabel $filesToolbar $dirsToolbar $pane
  45.  
  46.   .main setValues -menuBar $menu -workWindow .main.form
  47. }
  48.  
  49. #
  50. # createFilesToolbar
  51. proc createFilesToolbar {parent} {
  52.   global FILES_TOOLBAR_SIZE
  53.   global fileToolbarButtons
  54.  
  55.   xmRowColumn $parent.filesToolbar managed \
  56.     -numColumns        3 \
  57.     -packing         pack_column \
  58.     -orientation    horizontal \
  59.     -adjustLast        false
  60.  
  61.   for {set n 0} {$n < $FILES_TOOLBAR_SIZE} {incr n} {
  62.     set button [xmPushButton $parent.filesToolbar.filesToolbarButton$n managed \
  63.                 -labelString " "]
  64.     $button activateCallback "fileToolButtonPressed $n"
  65.     set fileToolbarButtons($n) $button
  66.   }
  67.  
  68.   return $parent.filesToolbar
  69. }
  70.  
  71. #
  72. # createDirsToolbar
  73. #
  74. proc createDirsToolbar {parent} {
  75.   global FILES_TOOLBAR_SIZE
  76.  
  77.   xmRowColumn $parent.dirsToolbar managed \
  78.     -numColumns        3 \
  79.     -packing         pack_column \
  80.     -orientation    horizontal \
  81.     -adjustLast        false
  82.  
  83.   for {set n 0} {$n < $FILES_TOOLBAR_SIZE} {incr n} {
  84.     set button [xmPushButton $parent.dirsToolbar.dirsToolbarButton$n managed \
  85.                 -labelString " "]
  86.     $button activateCallback "fileToolButtonPressed $n"
  87.   }
  88.  
  89.   return $parent.dirsToolbar
  90. }
  91.  
  92. #
  93. # createMenu
  94. #
  95. proc createMenu {parent} {
  96.   # top menu bar
  97.   xmMenuBar $parent.menuBar managed
  98.   xmCascadeButton $parent.menuBar.file managed \
  99.         -labelString File \
  100.         -mnemonic F
  101.   xmCascadeButton $parent.menuBar.edit managed \
  102.         -labelString Edit \
  103.         -mnemonic E
  104.   xmCascadeButton $parent.menuBar.help managed \
  105.          -labelString Help \
  106.         -mnemonic H
  107.  
  108.   # file pulldown
  109.   xmPulldownMenu $parent.fileMenu
  110.   xmPushButton $parent.fileMenu.new managed \
  111.         -labelString "New..." \
  112.         -mnemonic N
  113.   xmPushButton $parent.fileMenu.quit managed \
  114.          -labelString Quit \
  115.         -mnemonic Q
  116.   $parent.fileMenu.quit activateCallback exit
  117.  
  118.   $parent.menuBar.file setValues -subMenuId $parent.fileMenu
  119.  
  120.   return $parent.menuBar
  121. }
  122.  
  123. #
  124. # createPane
  125. #
  126. proc createPane {parent} {
  127.   xmPanedWindow $parent.pane
  128.  
  129.   # create the executable files section
  130.   xmForm $parent.pane.rc1 managed
  131.  
  132.   xmLabel $parent.pane.rc1.executableFilter managed \
  133.     -topAttachment attach_form \
  134.     -leftAttachment attach_form
  135.  
  136.   xmScrolledWindow $parent.pane.rc1.sw managed \
  137.     -scrollingPolicy    automatic \
  138.     -topAttachment attach_widget \
  139.     -topWidget $parent.pane.rc1.executableFilter \
  140.     -leftAttachment attach_form \
  141.     -rightAttachment attach_form \
  142.     -bottomAttachment attach_form
  143.  
  144.   xmRowColumn $parent.pane.rc1.sw.executablesPane managed
  145.  
  146.   $parent.pane.rc1.sw setValues \
  147.     -workWindow $parent.pane.rc1.sw.executablesPane
  148.  
  149.  
  150.   # create the ordinary files section
  151.   xmForm $parent.pane.rc2 managed
  152.  
  153.   xmLabel $parent.pane.rc2.fileFilter managed \
  154.     -topAttachment attach_form \
  155.     -leftAttachment attach_form
  156.  
  157.   xmScrolledWindow $parent.pane.rc2.sw managed \
  158.     -scrollingPolicy    automatic \
  159.     -topAttachment attach_widget \
  160.     -topWidget $parent.pane.rc2.fileFilter \
  161.     -leftAttachment attach_form \
  162.     -rightAttachment attach_form \
  163.     -bottomAttachment attach_form
  164.  
  165.   xmRowColumn $parent.pane.rc2.sw.filesPane managed
  166.  
  167.   $parent.pane.rc2.sw setValues \
  168.     -workWindow $parent.pane.rc2.sw.filesPane
  169.  
  170.   # create the directories section
  171.   xmForm $parent.pane.rc3 managed
  172.  
  173.   xmLabel $parent.pane.rc3.dirFilter managed \
  174.     -topAttachment attach_form \
  175.     -leftAttachment attach_form
  176.  
  177.   xmScrolledWindow $parent.pane.rc3.sw managed \
  178.     -scrollingPolicy    automatic \
  179.     -topAttachment attach_widget \
  180.     -topWidget $parent.pane.rc3.dirFilter \
  181.     -leftAttachment attach_form \
  182.     -rightAttachment attach_form \
  183.     -bottomAttachment attach_form
  184.  
  185.   xmRowColumn $parent.pane.rc3.sw.dirsPane managed
  186.  
  187.   $parent.pane.rc3.sw setValues \
  188.     -workWindow $parent.pane.rc3.sw.dirsPane
  189.  
  190.  
  191.   return $parent.pane
  192. }
  193.  
  194. #
  195. # setGeometry
  196. #
  197. proc setGeometry {dirLabel filesToolbar dirsToolbar pane} {
  198.   $dirLabel setValues \
  199.     -topAttachment    attach_form \
  200.     -leftAttachment    attach_form \
  201.     -rightAttachment    attach_form
  202.  
  203.   $filesToolbar setValues \
  204.     -topAttachment    attach_widget \
  205.     -topWidget        $dirLabel \
  206.     -leftAttachment    attach_form \
  207.     -bottomAttachment    attach_position \
  208.     -bottomPosition    45
  209.  
  210.   $dirsToolbar setValues \
  211.     -topAttachment    attach_position \
  212.     -topPosition    50 \
  213.     -leftAttachment    attach_form \
  214.     -bottomAttachment    attach_form
  215.  
  216.   $pane setValues \
  217.     -topAttachment    attach_widget \
  218.     -topWidget        $dirLabel \
  219.     -leftAttachment    attach_widget \
  220.     -leftWidget        $filesToolbar \
  221.     -rightAttachment    attach_form \
  222.     -bottomAttachment    attach_form
  223. }
  224.  
  225. #######################################################################
  226. #
  227. # This section contains the callbacks for the various widgets
  228. #
  229. #######################################################################
  230.  
  231. #
  232. # fileToolButtonPressed
  233. #
  234. proc fileToolButtonPressed {n} {
  235.   global fileToolbarButtonAction
  236.   global selectedFile
  237.  
  238.   set oldAction [lindex $fileToolbarButtonAction($n) 3]
  239.   regsub -all {\$0} $oldAction $selectedFile newAction
  240.   if { [regexp {^\$} $newAction] } {
  241.     builtinCommand "$newAction"
  242.   } else {
  243.     set runInXterm [lindex $fileToolbarButtonAction($n) 0]
  244.     set pauseAfterExec [lindex $fileToolbarButtonAction($n) 1]
  245.     doCommand "$newAction" $runInXterm $pauseAfterExec
  246.   }
  247. }
  248.  
  249. #
  250. # fileButtonPressed
  251. #
  252. proc fileButtonPressed {widget type} {
  253.   global actions
  254.   global fileToolbarButtons
  255.   global fileToolbarButtonAction
  256.   global FILES_TOOLBAR_SIZE
  257.   global selectedFile
  258.   global selectedWidget
  259.  
  260.   if {$selectedWidget != ""} {
  261.     invertColours $selectedWidget unhighlight
  262.   }
  263.   $widget getValues -labelString file
  264.   set selectedFile $file
  265.   set selectedWidget $widget
  266.   invertColours $selectedWidget highlight
  267.  
  268.   foreach f $actions {
  269.     set t_def [lindex $f 0]
  270.     if {$t_def != $type} continue
  271.     set pattern [lindex $f 1]
  272.     if { ! [string match $pattern $file] } continue
  273.     # we have a match!
  274.  
  275.     set pixmap [lindex $f 2]
  276.     set description [lindex $f 3]
  277.     set acts [lindex $f 4]
  278.  
  279.     set m 0
  280.     set length [llength $acts]
  281.     while {$m < $length && $m < $FILES_TOOLBAR_SIZE} {
  282.       set a [lindex $acts $m]
  283.       $fileToolbarButtons($m) setValues \
  284.         -labelString [lindex $a 2]
  285.       $fileToolbarButtons($m) setSensitive true
  286.       set fileToolbarButtonAction($m) $a
  287.       incr m
  288.     }
  289.  
  290.     # clear other buttons
  291.     while {$m < $FILES_TOOLBAR_SIZE} {
  292.       $fileToolbarButtons($m) setSensitive false
  293.       $fileToolbarButtons($m) setValues \
  294.     -labelString ""
  295.       incr m
  296.     }
  297.     break
  298.   }
  299. }
  300.  
  301. #
  302. # fileButtonReleased
  303. #
  304. proc fileButtonReleased {widget type} {
  305.   $widget getValues -labelString file
  306. }
  307.  
  308. #
  309. # fileButtonExposed
  310. #
  311. proc fileButtonExposed {widget type} {
  312.   global buttonsInfo
  313.  
  314.   $widget getValues -labelString file
  315.  
  316.   set fileInfo $buttonsInfo($widget)
  317.   set filename [lindex $fileInfo 0]
  318.   set gc [lindex $fileInfo 3]
  319.  
  320.   $widget getValues -height h
  321.   $widget drawImageString $gc 0 [expr $h-5] $filename 
  322. }
  323.  
  324. #######################################################################
  325. #
  326. # This section handles commands when they are selected
  327. #
  328. #######################################################################
  329.  
  330. #
  331. # builtinCommand
  332. #
  333. proc builtinCommand {command} {
  334.  
  335.   if { [regexp {^\$cd} $command] } {
  336.     set dirName [lindex $command 1]
  337.     cd $dirName
  338.     panelSetFiles .main.form.pane
  339.   }
  340. }
  341.  
  342. #
  343. # doCommand
  344. #   - this handles the non builtin commands
  345. #
  346. proc doCommand {command runInXterm pauseAfterExec} {
  347.  
  348.   if {$runInXterm && $pauseAfterExec} {
  349.     set newCommand "xterm -e pauseme $command"
  350.   } else {
  351.     if {$runInXterm} {
  352.       set newCommand "xterm -e $command"
  353.     } else {
  354.       set newCommand $command
  355.     }
  356.   }
  357.   eval exec $newCommand < /dev/null &
  358. }
  359.  
  360.  
  361. #######################################################################
  362. #
  363. # this section handles the dynamic updating of files displayed in the
  364. # various pane areas
  365. #
  366. #######################################################################
  367.  
  368. #
  369. # pixmapOf
  370. #  - find the pixmap for a filename
  371. #
  372. proc pixmapOf {file type} {
  373.   global actions
  374.  
  375.   foreach f $actions {
  376.     set t_def [lindex $f 0]
  377.     if {$t_def != $type} continue
  378.     set pattern [lindex $f 1]
  379.     if { ! [string match $pattern $file] } continue
  380.     # we have a match!
  381.  
  382.     set pixmap [lindex $f 2]
  383.     return $pixmap
  384.   }
  385. }
  386.  
  387. #
  388. # setGCs
  389. #
  390. proc setGCs {widget} {
  391.   global gc gc_reversed
  392.  
  393.   $widget getValues -foreground fg -background bg
  394.   set gc [$widget getGC -foreground $fg -background $bg]
  395.   set gc_reversed [$widget getGC -foreground $bg -background $fg]
  396. }
  397.  
  398. #
  399. # newPaneButton
  400. #
  401. proc newPaneButton {parent n} {
  402.   xmDrawnButton $parent.button$n managed \
  403.     -labelType pixmap
  404.  
  405.   return $parent.button$n
  406. }
  407.  
  408. #
  409. # panelSetFiles
  410. #  - the toplevel setter
  411. #
  412. proc panelSetFiles {panel} {
  413.   global dirArray
  414.   global fileArray
  415.   global executableArray
  416.   global buttonsInfo
  417.   global gc
  418.   global gc_reversed
  419.   global firstTime
  420.  
  421.   set dirCount 0
  422.   set fileCount 0
  423.   set executableCount 0
  424.  
  425.   setGCs $panel
  426.  
  427.   # turn off unpleasant screen draws
  428.   if { $firstTime != 0 } {
  429.     $panel.rc1.sw.executablesPane unmapWidget
  430.     $panel.rc2.sw.filesPane unmapWidget
  431.     $panel.rc3.sw.dirsPane unmapWidget
  432.   }
  433.  
  434.   set files [exec ls -a]
  435.   foreach f $files {
  436.     if { [file isdirectory $f] } {
  437.       if { ! [info exists dirArray($dirCount)] } {
  438.     set button \
  439.         [newPaneButton $panel.rc3.sw.dirsPane $dirCount]
  440.     $button armCallback {fileButtonPressed %w d}
  441.     $button activateCallback {fileButtonReleased %w d}
  442.     $button exposeCallback {fileButtonExposed %w d}
  443.     set dirArray($dirCount) $button
  444.       }
  445.       set pixmap [pixmapOf $f d]
  446.  
  447.       $dirArray($dirCount) setValues \
  448.         -labelPixmap $pixmap \
  449.     -labelString $f 
  450.       $dirArray($dirCount) manageChild
  451.  
  452.       set buttonsInfo($dirArray($dirCount)) \
  453.         [list $f d $pixmap $gc $gc_reversed]
  454.       incr dirCount
  455.  
  456.       continue
  457.     }
  458.  
  459.     if { [file executable $f] } {
  460.       if { ! [info exists executableArray($executableCount)] } {
  461.         set button \
  462.                 [newPaneButton $panel.rc1.sw.executablesPane $executableCount]
  463.     $button activateCallback {fileButtonReleased %w x}
  464.     $button armCallback {fileButtonPressed %w x}
  465.     $button exposeCallback {fileButtonExposed %w x}
  466.     set executableArray($executableCount) $button
  467.       }
  468.       set pixmap [pixmapOf $f x]
  469.  
  470.       $executableArray($executableCount) setValues \
  471.         -labelPixmap $pixmap \
  472.         -labelString $f 
  473.       $executableArray($executableCount) manageChild
  474.  
  475.       set buttonsInfo($executableArray($executableCount)) \
  476.         [list $f d $pixmap $gc $gc_reversed]
  477.       incr executableCount
  478.  
  479.       continue
  480.     }
  481.  
  482.     if { ! [info exists fileArray($fileCount)] } {
  483.       set button \
  484.                 [newPaneButton $panel.rc2.sw.filesPane $fileCount]
  485.       $button armCallback {fileButtonPressed %w f}
  486.     $button exposeCallback {fileButtonExposed %w f}
  487.       $button activateCallback {fileButtonReleased %w f}
  488.       set fileArray($fileCount) $button
  489.     }
  490.     set pixmap [pixmapOf $f f]
  491.  
  492.     $fileArray($fileCount) setValues \
  493.       -labelString $f \
  494.       -labelPixmap $pixmap
  495.     $fileArray($fileCount) manageChild
  496.  
  497.     set buttonsInfo($fileArray($fileCount)) \
  498.         [list $f d $pixmap $gc $gc_reversed]
  499.     incr fileCount
  500.   }
  501.  
  502.   # now we get to unmanage all the files that are still showing
  503.   while { [info exists dirArray($dirCount)]} {
  504.     $dirArray($dirCount) unmanageChild
  505.     incr dirCount
  506.   }
  507.   while { [info exists executableArray($executableCount)]} {
  508.     $executableArray($executableCount) unmanageChild
  509.     incr executableCount
  510.   }
  511.   while { [info exists fileArray($fileCount)]} {
  512.     $fileArray($fileCount) unmanageChild
  513.     incr fileCount
  514.   }
  515.  
  516.   # make this all visible again
  517.   if { $firstTime != 0 } {
  518.     $panel.rc1.sw.executablesPane mapWidget
  519.     $panel.rc2.sw.filesPane mapWidget
  520.     $panel.rc3.sw.dirsPane mapWidget
  521.   }
  522.   set firstTime 1
  523. }
  524.  
  525. #######################################################################
  526. #
  527. # this section covers what happens when a file is selected in a pane
  528. #
  529. #######################################################################
  530.  
  531. #
  532. # invertColours
  533. #
  534. proc invertColours {widget highlight} {
  535.   global buttonsInfo
  536.   
  537.   set fileInfo $buttonsInfo($widget)
  538.   set filename [lindex $fileInfo 0]
  539.   set pixmap [lindex $fileInfo 2]
  540.   set gc [lindex $fileInfo 3]
  541.   set gc_reversed [lindex $fileInfo 4]
  542.   set buttonsInfo($widget) \
  543.     [lreplace $fileInfo 3 4 $gc_reversed $gc]
  544.  
  545.   # this is a roundabout route for inverting the
  546.   # pixmap, because I cannot set the fg and bg
  547.   # directly for it. may need to unmap to stop
  548.   # unpleasant visual effects
  549.   $widget getValues -foreground fg -background bg
  550.   if {"$highlight" == "highlight"} {
  551.     $widget unmapWidget
  552.     $widget setValues -foreground $bg -background $fg
  553.     $widget setValues -labelPixmap $pixmap
  554.     $widget setValues -foreground $fg -background $bg
  555.     $widget mapWidget
  556.   } else {
  557.     $widget setValues -labelPixmap $pixmap
  558.   }
  559.  
  560.   # in xmfm this was XClearArea:
  561.   $widget getValues -height h
  562.   $widget drawImageString $gc_reversed 0 [expr $h-5] $filename 
  563. }
  564.  
  565. #######################################################################
  566. #
  567. # this section handles parsing of the action specification file
  568. #
  569. #######################################################################
  570.  
  571. #
  572. # loadActionsFile
  573. #
  574. proc loadActionsFile {} {
  575.   global env
  576.  
  577.   if { [file exists xtmfmrc] } {
  578.     source xtmfmrc
  579.     return
  580.   }
  581.   set homeXtmfmrc $env(HOME)/.xtmfmrc
  582.   if { [file exists $homeXtmfmrc] } {
  583.     source $homeXtmfmrc
  584.     return
  585.   }
  586.   if { [info exists env(XAPPRESDIR)] } {
  587.     source $env(XAPPRESDIR)/xtmfmrc
  588.     return
  589.   }
  590.   if { [file exists "/usr/lib/X11/app-defaults/xtmfmrc"] } {
  591.     source "/usr/lib/X11/app-defaults/xtmfmrc"
  592.     return
  593.   }
  594.   puts stderr "Can't find xtmfmrc file"
  595.   exit 1
  596. }
  597.  
  598. #
  599. # load_actions
  600. #  - parse the actions list and store it
  601. #
  602. proc loadActions {inActs} {
  603.   global actions
  604.  
  605.   set actions {}
  606.   foreach filetype $inActs {
  607.     set next [addFileType $filetype]
  608.     set actions [lappend actions $next]
  609.   }
  610. }
  611.  
  612. #
  613. # fileAction
  614. #  - parse the set of actions for an individual file type
  615. #
  616. proc fileAction {action} {
  617.   set act(label) ""
  618.   set act(run_in_xterm) 0
  619.   set act(pause_after_exec) 0
  620.   set act(action) ""
  621.   set act(prompt) ""
  622.   set act(confirm) ""
  623.  
  624.   set n 0
  625.   set length [llength $action]
  626.   while {$n < $length} {
  627.     set item [lindex $action $n]
  628.     case $item in {
  629.       run_in_xterm     {set act(run_in_xterm) 1}
  630.       pause_after_exec    {set act(pause_after_exec) 1}
  631.       label        {
  632.              incr n
  633.              set act(label) [lindex $action $n]
  634.             }
  635.       action        {
  636.              incr n
  637.              set act(action) [lindex $action $n]
  638.             }
  639.       prompt        {
  640.              incr n
  641.              set act(prompt) [lindex $action $n]
  642.             }
  643.       confirm        {
  644.              incr n
  645.              set act(confirm) [lindex $action $n]
  646.             }
  647.      default        {
  648.              puts stderr "unknown action $item"
  649.             }
  650.     }
  651.     incr n
  652.   }
  653.   return [list $act(run_in_xterm) $act(pause_after_exec) \
  654.             $act(label) $act(action) $act(prompt) $act(confirm)]
  655.   
  656. }
  657.  
  658. #
  659. # parse the entry for a new filetype
  660. #
  661. proc addFileType {filetype} {
  662.   set n 0
  663.   set length [llength $filetype]
  664.   
  665.   set a(type) ""
  666.   set a(pattern) ""
  667.   set a(pixmap) ""
  668.   set a(description) ""
  669.   set a(actions) {}
  670.  
  671.   while {$n < $length} {
  672.     set current [lindex $filetype $n]
  673.     case $current in {
  674.       type    {incr n
  675.          set a(type) [lindex $filetype $n]
  676.          incr n
  677.         }
  678.       pattern    {incr n
  679.                  set a(pattern) [lindex $filetype $n]
  680.                  incr n
  681.                 }
  682.       pixmap    {incr n
  683.                  set a(pixmap) [lindex $filetype $n]
  684.                  incr n
  685.                 }
  686.       description    {incr n
  687.                      set a(description) [lindex $filetype $n]
  688.                      incr n
  689.                     }
  690.       default    {
  691.          set a(actions) [lappend a(actions) [fileAction  $current]]
  692.          incr n 1
  693.                 }
  694.     }
  695.   }
  696.   return [list $a(type) $a(pattern) $a(pixmap) $a(description) $a(actions)]
  697. }
  698.  
  699. #######################################################################
  700. #
  701. # global commands to set this all going
  702. #
  703. #######################################################################
  704.  
  705.  
  706.  
  707. loadActionsFile
  708.  
  709. set selectedWidget ""
  710. set firstTime 0
  711.  
  712. xtAppInitialize -class Xtmfm \
  713.     -fallbackResources {
  714.     {*main.width: 600}
  715.     {*main.height: 600}
  716.  
  717.     {*filesToolbar*XmPushButton.height: 70}
  718.     {*filesToolbar*XmPushButton.width: 70}
  719.     {*filesToolbar*XmPushButton.recomputeSize: false}
  720.     {*filesToolbar.entryAlignment: alignment_center}
  721.  
  722.     {*dirsToolbar*XmPushButton.height: 70}
  723.     {*dirsToolbar*XmPushButton.width: 70}
  724.     {*dirsToolbar*XmPushButton.recomputeSize: false}
  725.     {*dirsToolbar.entryAlignment: alignment_center}
  726.  
  727.     {*XmDrawnButton.width: 100}
  728.     {*XmDrawnButton.height: 70}
  729.     {*XmDrawnButton.recomputeSize: false}
  730.     {*XmDrawnButton.shadowThickness: 0}
  731.     {*XmDrawnButton.borderWidth:     0}
  732.     {*XmDrawnButton.highlightThickness:      0}
  733.  
  734.     {*executablesPane.packing: pack_column}
  735.     {*executablesPane.orientation: vertical}
  736.     {*executablesPane.numColumns: 4}
  737.  
  738.     {*dirsPane.packing: pack_column}
  739.     {*dirsPane.orientation: vertical}
  740.     {*dirsPane.numColumns: 4}
  741.  
  742.     {*filesPane.packing: pack_column}
  743.     {*filesPane.orientation: vertical}
  744.     {*filesPane.numColumns: 4}
  745.  
  746.     {*executableFilter.labelString: Filter *}
  747.     {*fileFilter.labelString: Filter *}
  748.     {*dirFilter.labelString: Filter *}
  749.     }
  750.  
  751. createApplication
  752.  
  753. . realizeWidget
  754. . mainLoop
  755.  
  756.